package com.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @ClassName ReflectDemo
 * @Description 反射
 * @Author 2214361854
 * @Date 2022/3/4 16:12
 * @Version 1.0
 */
public class ReflectDemo {
//    public static void main(String[] args) throws Exception {
//        /**
//         * 方式1，Class.forName(全路径获取)
//         * Class c = Class.forName("com.framework.Student");
//         * 方式2，类名.class
//         * 方式3，对象.getClass()
//         */
//
//        Class c = Student.class;
////        System.out.println(c);
//
//        Constructor cons1 = c.getDeclaredConstructor(String.class,int.class);
////        System.out.println(cons1);
//
//        //暴力反射，（非public构造器使用）
//        cons1.setAccessible(true);
//
//        Student  s1 = (Student)cons1.newInstance("小王",18);
//        System.out.println(s1);
//
////        只能获得public的
////        Constructor conslist = c1.getConstructor();
////        System.out.println(conslist);
//
//        Field nameF = c.getDeclaredField("name");
//        nameF.setAccessible(true);
//        Student student = new Student();
//        //赋值
//        nameF.set(student,"小明");
//        //取值
//        String name = (String)nameF.get(student);
//        System.out.println(name);
//        System.out.println("========");
//        //获取全部方法
//        Method[] methods = c.getDeclaredMethods();
//        for (Method method : methods) {
//            System.out.println("方法名："+method.getName()+"，返回值类型："+method.getReturnType()+"，参数个数："+method.getParameterCount());
//        }
//
//        //获取单个方法
//        Method getName = c.getMethod("getName");
//        System.out.println(getName);
//        //触发方法
//        System.out.println(getName.invoke(student));
//    }
//}
//class Student{
//    private String name;
//    private int age;
//
//    public Student() {
//    }
//
//    private Student(String name, int age) {
//        this.name = name;
//        this.age = age;
//        System.out.println("有参构造器调用");
//    }
//
//    public Student(String name) {
//        this.name = name;
//    }
//
//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    public int getAge() {
//        return age;
//    }
//
//    public void setAge(int age) {
//        this.age = age;
//    }
//
//    @Override
//    public String toString() {
//        return "Student{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                '}';
//    }
}